package com.cotasul.persistencia;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import com.cotasul.bean.FormaPagamentoBean;
import com.cotasul.bean.FornecedorBean;
import com.cotasul.persistencia.config.GerenciadorConexao;
import com.cotasul.persistencia.config.SQLConfiguracao;
import com.cotasul.persistencia.enums.EnumCondicao;
import com.cotasul.persistencia.interfaces.IFormaPagamentoDao;
import com.cotasul.util.ConsultasUteis;

public class FormaPagamentoDao<P extends FormaPagamentoBean> extends
		DaoGenerico<P> implements IFormaPagamentoDao<P> {

	@Override
	public String procuraPorParam(String tabela, String campo, String valor,
			EnumCondicao condicao) {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public Map<String,Long> salvar(P p) throws Exception {

		FornecedorBean fornecedor = ConsultasUteis.buscaFornecedor(p
				.getFornecedor());

		conn = GerenciadorConexao.getConexao();
		query = SQLConfiguracao.getInstance()
				.getValor("insere_forma_pagamento");
		ps = conn.prepareStatement(query);
		ps.setString(1, p.getMetodoPag());
		ps.setString(2, p.getFormaPag());
		ps.setLong(3, fornecedor.getCodigo());
		ps.execute();
		conn.commit();
		super.fecharRecursos(ps, rs);

		return null;
	}

	@SuppressWarnings("unchecked")
	@Override
	public List<P> buscaFormas(Map<String, String> params) throws Exception {

		List<P> formas = new ArrayList<P>();
		FormaPagamentoBean forma = null;
		int psIndex = 1;
		conn = GerenciadorConexao.getConexao();
		query = SQLConfiguracao.getInstance().getValor(
				"localiza_formas_pagamento");
		if (params.get("METODO") != null) {
			query += " AND METODO_PAGAMENTO LIKE ?";
		}
		if (params.get("FORMA") != null) {
			query += " AND FORMA_PAGAMENTO LIKE ?";
		}
		if (params.get("CODIGO") != null) {
			query += " AND IDFORMA = ?";
		}
		


		ps = conn.prepareStatement(query);
		ps.setLong(psIndex++, Long.parseLong(params.get("CODFORNE")));
		if (params.get("METODO") != null) {
			ps.setString(psIndex++, "%" + params.get("METODO") + "%");
		}
		if (params.get("FORMA") != null) {
			ps.setString(psIndex++, "%" + params.get("FORMA") + "%");
		}
		if (params.get("CODIGO") != null) {
			ps.setLong(psIndex++, Long.parseLong(params.get("CODIGO")));
		}

		rs = ps.executeQuery();
		while (rs.next()) {
			forma = new FormaPagamentoBean();
			forma.setFormaPag(rs.getString("FORMA_PAGAMENTO"));
			forma.setMetodoPag(rs.getString("METODO_PAGAMENTO"));
			forma.setIdFormaPag(rs.getLong("IDFORMA"));
			formas.add((P) forma);
		}
		super.fecharRecursos(ps, rs);

		return formas;
	}

	@Override
	public void exluir(P p) throws Exception {
		conn = GerenciadorConexao.getConexao();
		query = SQLConfiguracao.getInstance().getValor("exclui_forma_pag");
		ps = conn.prepareStatement(query);
		ps.setLong(1, p.getIdFormaPag());
		ps.execute();
		conn.commit();
		ps.close();
	}
	
	@Override
	public void alterar(P p) throws Exception {
		
		conn = GerenciadorConexao.getConexao();
		query = SQLConfiguracao.getInstance().getValor("altera_forma_pag");
		ps = conn.prepareStatement(query);
		ps.setString(1, p.getMetodoPag());
		ps.setString(2, p.getFormaPag());
		ps.setLong(3, p.getIdFormaPag());
		ps.execute();
		conn.commit();
		ps.close();
		
	}

	@Override
	public void preSalvar(P p) {
		// TODO Auto-generated method stub

	}

}
